package com.standard.logcat.logBus

/**
 * 获取RXObj
 */
inline val <T> T.obs: RXObj<T> get() = RXObj(this)


class RXObj<T>(data: T) {

    /**
     * 所有的观察者
     */
    private val observers = mutableListOf<Observer<T>>()

    /**
     * 回调接口
     */
    interface Observer<T> {
        fun observe(data: T)
    }

    /**
     * 数据
     */
    var value: T = data
        set(value) {
            field = value
            notifyChange()
        }

    /**
     * 通知数据改变
     */
    private fun notifyChange() {
        for (obs in observers) {
            obs.observe(value)
        }
    }


    /**
     * 订阅
     */
    fun sub(obs: Observer<T>) {
        observers.add(obs)
    }

    fun removeObs(obs: Observer<T>) {
        observers.remove(obs)
    }
}